package cn.yh.nft.turbo.base.pool;

import com.google.common.util.concurrent.ThreadFactoryBuilder;

import java.util.concurrent.*;

/**
 * @ClassName: ThreadPoolUtils
 * @Author: 草莓爱上啵啵
 *  线程工具类
 */
public class ThreadPoolUtils {


    /**
     *  定义一个静态的 ThreadFactory 变量 smsSendFactory，用于创建具有特定命名格式的线程
     *  使用 ThreadFactoryBuilder 构建线程工厂，设置线程名称格式为 "demo-pool-%d"（%d 会被替换为线程编号）
     */
    public static ThreadFactory smsSendFactory = new ThreadFactoryBuilder()
            .setNameFormat("demo-pool-%d").build();

    /**
     *  定义一个静态的 ExecutorService 变量 smsSendPool，这是一个线程池实例
     * 使用 ThreadPoolExecutor 构造函数创建线程池，参数如下：
     * 5 - 核心线程数（corePoolSize）
     * 20 - 最大线程数（maximumPoolSize）
     * 0L - 空闲线程存活时间（keepAliveTime）
     * TimeUnit.MILLISECONDS - 存活时间的单位（毫秒）
     * new LinkedBlockingQueue<Runnable>(1024) - 工作队列，容量为1024
     * smsSendFactory - 线程工厂，用于创建线程
     * new ThreadPoolExecutor.AbortPolicy() - 拒绝策略，当队列满时抛出异常
     */
    public static ExecutorService smsSendPool = new ThreadPoolExecutor(5,20,
            0L, TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<Runnable>(1024) , smsSendFactory, new ThreadPoolExecutor.AbortPolicy());


    /**
     * 定义一个静态方法 getSmsSendPool()，用于获取 smsSendPool 线程池实例
     * 方法返回 ExecutorService 类型的线程池对象
     * @return 返回线程对象
     */
    public static ExecutorService getSmsSendPool(){
        return smsSendPool;
    }
}
